home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / UTILITY / MAKE / STANDARD.MKE < prev   
Encoding:
Text File  |  1992-08-03  |  3.5 KB  |  118 lines

  1. #
  2. # universelle Make-Prozedur
  3. #
  4. # für alle Module wird eine Abhängigkeit von einer
  5. # eventuellen Gesamtprojekt-Includedatei und eventuellen modulspezifischen
  6. # Includedateien, die denselben Namen wie das Modul tragen, angenommen.
  7. #
  8. # lauffähig erst ab Interpreterversion 2.01
  9. #
  10. # (c) P.Vranken, 4.6.1992
  11. #
  12. # Bemerkungen: Da auf konsequente Anwendung von "" verzichtet wurde, ist
  13. # darauf zu achten, daß keine Variablen des Namens c, h, o, s, cll, mke  u.a.
  14. # verwendet werden. Außerdem müssen Pfade und Optionen natürlich korrekt
  15. # angepaßt werden.
  16.  
  17. func set_options()
  18. #
  19. # hier die gewünschten Optionen angeben
  20. #
  21. # Programmname:
  22.    let programm$ = "programm.prg"
  23. # Module (ohne .C) und ihre Anzahl eintragen:
  24.    let anz_module = 3
  25.    let modul$[1] = "main"
  26.    let modul$[2] = "up_1"
  27.    let modul$[3] = "up_2"
  28. # Gesamtprojekt-Include:
  29.    let include$  = "gen_inc.h"
  30. # Compiler:
  31.    let cc$ = "\usr\bin\cc.prg"
  32.    let cc_optionen$ = "-xyz -inc=\usr\include"
  33. # Linker:
  34.    let cl$ = "\usr\bin\cl.prg"
  35.    let cl_optionen$ = '-o=programm$ -lib=\usr\lib\'
  36.    let cl_library$  = "float.lib std.lib tos.lib"
  37. endfunc
  38.  
  39. func cc_comline(); # hier wird die Compilerkommandozeile erzeugt
  40.    let cc_com$ = cc_optionen$
  41.    for t=1 to anz_module
  42.       if istomake(modul$[t].o: modul$[t].c, modul$[t].h, include$, argv$[0].mke)
  43.          let cc_com$ += ' modul$[t].c'
  44.       endif
  45.    next
  46.    let cc_comline = strcmp('cc_optionen$', 'cc_com$')
  47. endfunc
  48.  
  49. # es wird davon ausgegangen, daß der Binder als Eingabe auch eine Datei
  50. # verarbeiten kann, denn die in der Länge begrenzte Kommandozeile reicht
  51. # gewöhnlich nicht, um eine Reihe von Objektmodulen und Bibliotheken anzu-
  52. # geben.
  53. func cl_comfile(); # hier wird die Linkeranweisungsliste erstellt
  54.    puts "Eine Datei mit Linkeranweisungen"
  55.    OUT_TO modul$[1].cll
  56.    puts cl_optionen$.
  57.    for t=1 to anz_module
  58.       puts modul$[t], ".o".
  59.    next
  60.    puts cl_library$.
  61.    OUT_TO stdout
  62.    puts " wurde erstellt:".
  63.    shows modul$[1].cll
  64. endfunc
  65.  
  66. func mustlink(); # muß der Linker aufgerufen werden?
  67.    let mustlink = istomake(programm$: modul$[1].cll)
  68.    for t=1 to anz_module
  69.       let mustlink = mustlink || istomake(programm$: modul$[t].o)
  70.    next
  71. endfunc
  72.  
  73. #
  74. # Beginn des Hauptprogramms
  75. #
  76. warn_ver 201
  77. gosub set_options()
  78. putc " >>>>>> Makeprozedur zur Erzeugung von ", programm$, " <<<<<< ".
  79. putc DATE$.
  80.  
  81. if istomake(modul$[1].cll: "standard.mke");# Linkeranweisungen müssen neu erzeugt werden
  82.    del modul$[1].cll
  83.    gosub cl_comfile()
  84. endif
  85.  
  86. # Übersetzung, solange nötig
  87. while cc_comline();     # dann ist eine Übersetzung erforderlich
  88.    putc "cc.prg ", cc_com$.
  89.    del c_err
  90.    out_to c_err;    # Ausgabe umlenken
  91.    cc$ cc_com$;      # tcc aufrufen
  92.    out_to stdout
  93.    if RC;               # es trat ein Fehler auf
  94.       ed.prg c_err
  95.       exit RC;          # Editor mit Returncode!=0 verlassen => Prozedur abbrechen
  96.    else
  97.       showc c_err;      # Warnungen anzeigen
  98.    endif
  99. again
  100. #
  101. # Zusammenbinden, falls erforderlich
  102. #
  103. if mustlink()
  104.    putc "cl.prg -inc=", modul$[1], ".cll".
  105.    cl$ -inc=modul$[1].cll
  106.    if RC;                   # Link-Fehler: Ausgabe anhalten, damit man die
  107.       putc "eine Taste zum Fortfahren". 
  108.       gosub getchar();      # Meldung des Linkers lesen kann
  109.       del programm$;        # sonst können fehlerhafte Programme erzeugt werden
  110.    else
  111.       putc programm$, " wurde erzeugt".
  112.    endif
  113. else
  114.    putc programm$, " ist auf dem aktuellen Stand!".
  115.    gosub getchar()
  116. endif
  117. end.
  118.